// 一种新的原始数据类型
// 应用方式
// 应用场景
// let s1=Symbol()
// let s2=Symbol()
// console.log(s1,s2);
// console.log(s1===s2);

// let s1=Symbol('bar')
// console.log(s1);


// ()里只能传字符串
// const obj={
// name:'imooc'
// }
// let s =Symbol(obj)
// console.log(s);

// let s=Symbol('foo')
// console.log(s.description);//foo 获取描述

// let s1 =Symbol.for('foo')
// let s2 =Symbol.for('foo')
// console.log(s1===s2);//true 通过Symbol.for声明相同，相等  Symbol.for全局登记

// const s1 =Symbol('foo')
// console.log(Symbol.keyFor(s1));//undefined


// const s2 =Symbol.for('foo')
// console.log(Symbol.keyFor(s2));//foo
// // Symbol.keyFor的作用是查找是否全局登记过


// 应用场景

// const a={
//     张三:{aa:'eqe'},
//     李四:{avba:'123'},
//     李四:{aa23:'true'},
// }
// console.log(a);//中间的李四被后边重复的覆盖了，因为键相同会被后边的覆盖

// 还是会覆盖
// const stu1='李四'
// const stu2='李四'
// const grade={
//     [stu1]:{address:'yyy',tel:'222'},
//     [stu2]:{address:'zzz',tel:'333'}
// }
// console.log(grade);

// 引入symbol
// const stu1=Symbol('李四')
// const stu2=Symbol('李四')
// const grade={
//     [stu1]:{address:'yyy',tel:'222'},
//     [stu2]:{address:'zzz',tel:'333'}
// }
// console.log(grade);
// console.log(grade[stu1]);

// Symbol(李四): {address: 'yyy', tel: '222'}
// Symbol(李四): {address: 'zzz', tel: '333'

// const type={
//     T:Symbol(),
//     D:Symbol()

// }
// console.log(type);

// function getArea(shape) {
//     let area = 0
//     switch (shape) {
//         case type.T:
//             area = 1
//             break;
//         case type.D:
//             area = 2
//             break;
//     }
//     return area
// }
// console.log(getArea(type.T))


// 
const stu1 = Symbol('李四')
const stu2 = Symbol('李四')
const obj = {
    [stu1]: { address:'yyy', tel:'222' },
    [stu2]: { address:'zzz', tel:'333' }
}
Reflect.ownKeys(obj).forEach(key => {
    console.log(key, obj[key]);
})

